package com.iocup.keybastion.authentication;

import java.beans.Transient;
import java.io.Serializable;
import java.util.Date;

/**
 *
 *  token的相关信息  getAccess_token参数名为此风格，主要是为了序列化后参数名可以为access_token
 * @author xyjxust
 * @create 2021/11/23
 **/
public interface AccessToken extends Serializable {

    /**
     * 获取token
     *
     * @return
     */
    String getAccessToken();

    /**
     * 获取刷新token
     * @return
     */
    String getRefreshToken();

    /**
     * 获取刷新token
     * @return
     */
    @Transient
    RefreshToken getRToken();

    /**
     * 获取过期时间
     *
     * @return
     */
    @Transient
    Date getExpireTime();

    /**
     * 是否过期
     *
     * @return
     */
    @Transient
    boolean isExpire();

    /**
     * 距离过期时间还有多久
     *
     * @return
     */
    Integer getExpiresIn();

    /**
     * 获取token类型
     *
     * @return
     */
    String getTokenType();

    /**
     * 获取其他信息
     * @param key
     * @param <T>
     * @return
     */
    @Transient
    <T> T getOther(String key);
}
